package jm.data.structure.hash;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Objects;

/**
 * @Description 自定义对象计算哈希值
 * @date 2022/4/25 15:20
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {

    private String name;

    private int age;

    private float weight;

    @Override
    public int hashCode(){
        int hashCode = age;
        hashCode = hashCode * 31 + Float.floatToIntBits(weight);
        hashCode = hashCode * 31 + (name != null ? name.hashCode() : 0);
        return hashCode;
    }

    /**
     * 比较两个对象是否为同一个对象
     * @param o
     * @return
     */
    @Override
    public boolean equals(Object o) {
        // 如果当前对象和传入的对象内存地址一样，一定是一个对象。
        if (this == o){
            return true;
        }
        // 如果传入的对象为空，获取类型不同，一定不是同一个对象。
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // 比较成员变量是否全部相等
        Person person = (Person) o;
        return age == person.age
                && Float.compare(person.weight, weight) == 0
                && Objects.equals(name, person.name);
    }
}

